{
 "cells": [
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": [
    "# 使用 残差网络 ResNet 识别 MNIST\n",
    "\n",
    "训练集 train.csv | 验证集 test.csv"
   ],
   "id": "2503852bb2b93de1"
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-05-10T04:47:06.848270Z",
     "start_time": "2025-05-10T04:47:01.903735Z"
    }
   },
   "cell_type": "code",
   "source": [
    "# 经典三件套\n",
    "import numpy as np\n",
    "import pandas as pd\n",
    "import matplotlib.pyplot as plt\n",
    "# PyTorch 相关\n",
    "import torch\n",
    "from torch import nn\n",
    "from torch import optim\n",
    "from torch.utils.data import Dataset, DataLoader, random_split\n",
    "from torchvision import transforms, models"
   ],
   "id": "a47832025c03cf6a",
   "outputs": [],
   "execution_count": 1
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": "## 定义各个模块",
   "id": "8fceea31f37729e4"
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": "### 数据预处理",
   "id": "d0c9c1dc86e1a2ad"
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-05-10T04:47:11.542675Z",
     "start_time": "2025-05-10T04:47:11.536144Z"
    }
   },
   "cell_type": "code",
   "source": [
    "class MNIST(Dataset):\n",
    "    def __init__(self, path, transform, has_label=True):\n",
    "        # 读取文件\n",
    "        data = pd.read_csv(path).values\n",
    "        self.has_label = has_label\n",
    "        self.transform = transform\n",
    "        if self.has_label:\n",
    "            # 分离标签和图像数据\n",
    "            self.images = data[:, 1:].reshape(-1, 28, 28).astype(np.uint8)\n",
    "            self.labels = data[:, 0]\n",
    "        else:\n",
    "            self.images = data.reshape(-1, 28, 28).astype(np.uint8)\n",
    "            self.labels = None\n",
    "    \n",
    "    def __len__(self):\n",
    "        return self.images.shape[0]\n",
    "    \n",
    "    def __getitem__(self, item):\n",
    "        image = self.images[item]       # 获取单张图像和标签\n",
    "        image = self.transform(image)   # 归一化\n",
    "        if self.has_label:\n",
    "            label = self.labels[item]\n",
    "            return image, label\n",
    "        else:   # 没有标签\n",
    "            return image\n",
    "    \n",
    "    # 可视化\n",
    "    def show_samples(self):\n",
    "        idx = np.random.randint(0, len(self), 30)\n",
    "        plt.figure(figsize=(12, 4))\n",
    "        for i, image in enumerate(self.images[idx]):\n",
    "            plt.subplot(3, 10, 1 + i)\n",
    "            plt.imshow(image, cmap='gray')\n",
    "            if self.has_label:\n",
    "                plt.title(self.labels[idx[i]])\n",
    "            plt.axis('off')\n",
    "        plt.tight_layout()\n",
    "        plt.show()"
   ],
   "id": "a9b174a8a61868c8",
   "outputs": [],
   "execution_count": 2
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": "### 数据加载模块",
   "id": "f75ba60d1fd15aaf"
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-05-10T04:47:12.020495Z",
     "start_time": "2025-05-10T04:47:12.016047Z"
    }
   },
   "cell_type": "code",
   "source": [
    "def load_data(path, transform, batch_size, has_label=True):\n",
    "    # 载入数据集\n",
    "    datasets = MNIST(path, transform, has_label)\n",
    "    if has_label:\n",
    "        # 可视化观察\n",
    "        datasets.show_samples()\n",
    "        # 数据切分\n",
    "        train_size = int(0.8 * len(datasets))\n",
    "        val_size = len(datasets) - train_size\n",
    "        train_sets, val_sets = random_split(datasets, [train_size, val_size])\n",
    "        # 传入 DataLoader 中\n",
    "        train_loader = DataLoader(train_sets, batch_size=batch_size, shuffle=True, pin_memory=True)\n",
    "        val_loader = DataLoader(val_sets, batch_size=batch_size, shuffle=False, pin_memory=True)\n",
    "        return train_loader, val_loader\n",
    "    else:\n",
    "        test_loader = DataLoader(datasets, batch_size=batch_size, shuffle=False, pin_memory=True)\n",
    "        return test_loader"
   ],
   "id": "2dfbb5a75411847a",
   "outputs": [],
   "execution_count": 3
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": "### 直接加载 models 中的 ResNet18，并且直接用训练好的权重当作初始化参数",
   "id": "87ffacd23ac0c8f7"
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-05-10T04:47:12.300008Z",
     "start_time": "2025-05-10T04:47:12.296259Z"
    }
   },
   "cell_type": "code",
   "source": [
    "def create_model(num_channels, num_classes):\n",
    "    \n",
    "    # 导入 resnet18 模型\n",
    "    weights = models.ResNet18_Weights.IMAGENET1K_V1\n",
    "    model = models.resnet18(weights=weights)\n",
    "    \n",
    "    # 替换输入卷积层\n",
    "    out_channels = model.conv1.out_channels\n",
    "    kernel_size = model.conv1.kernel_size\n",
    "    stride = model.conv1.stride\n",
    "    padding = model.conv1.padding\n",
    "    bias = model.conv1.bias\n",
    "\n",
    "    model.conv1 = nn.Conv2d(\n",
    "        num_channels, out_channels, \n",
    "        kernel_size=kernel_size, \n",
    "        stride=stride, \n",
    "        padding=padding, \n",
    "        bias=bias\n",
    "    )\n",
    "    \n",
    "    # 替换全连接层\n",
    "    in_features = model.fc.in_features\n",
    "    model.fc = nn.Linear(in_features, num_classes)\n",
    "    \n",
    "    return model"
   ],
   "id": "f9a106e009da4915",
   "outputs": [],
   "execution_count": 4
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": "### 自定义 ResNet10 残差网络",
   "id": "dcbd5ec0a6837acd"
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-05-10T04:47:12.577829Z",
     "start_time": "2025-05-10T04:47:12.570700Z"
    }
   },
   "cell_type": "code",
   "source": [
    "class ResidualBlock(nn.Module):\n",
    "    \"\"\" 残差块 \"\"\"\n",
    "    def __init__(self, in_channels, out_channels, stride=1):\n",
    "        super().__init__()\n",
    "        \n",
    "        self.conv1 = nn.Conv2d(in_channels, out_channels, kernel_size=3, stride=stride, padding=1, bias=False)\n",
    "        self.bn1 = nn.BatchNorm2d(out_channels)\n",
    "        self.conv2 = nn.Conv2d(out_channels, out_channels, kernel_size=3, stride=1, padding=1, bias=False)\n",
    "        self.bn2 = nn.BatchNorm2d(out_channels)\n",
    "        self.relu = nn.ReLU(inplace=True)\n",
    "        \n",
    "        # 直接映射上一层的输出\n",
    "        self.shortcut = nn.Sequential()\n",
    "        \n",
    "        # 1 * 1 卷积核，扩展深度\n",
    "        if stride != 1 or in_channels != out_channels:\n",
    "            self.shortcut = nn.Sequential(\n",
    "                nn.Conv2d(in_channels, out_channels, kernel_size=1, stride=stride, bias=False), \n",
    "                nn.BatchNorm2d(out_channels)\n",
    "            )\n",
    "    \n",
    "    def forward(self, x):\n",
    "        identity = self.shortcut(x)     # 先映射保存上一层的输出\n",
    "        \n",
    "        out = self.conv1(x)\n",
    "        out = self.bn1(out)\n",
    "        out = self.relu(out)\n",
    "        \n",
    "        out = self.conv2(out)\n",
    "        out = self.bn2(out)\n",
    "        \n",
    "        out += identity     # F(x) + x\n",
    "        out = self.relu(out)\n",
    "        \n",
    "        return out\n",
    "\n",
    "\n",
    "class ResNet10(nn.Module):\n",
    "    def __init__(self, num_classes=10):\n",
    "        super().__init__()\n",
    "        # 开始输入\n",
    "        self.conv1 = nn.Conv2d(1, 32, kernel_size=3, stride=1, padding=1, bias=False)\n",
    "        self.bn1 = nn.BatchNorm2d(32)\n",
    "        self.relu = nn.ReLU(inplace=True)\n",
    "        self.maxpool = nn.MaxPool2d(kernel_size=3, stride=2, padding=1)\n",
    "        \n",
    "        # 调整通道数序列\n",
    "        self.layer1 = ResidualBlock(32, 32, stride=1)\n",
    "        self.layer2 = ResidualBlock(32, 64, stride=2)\n",
    "        self.layer3 = ResidualBlock(64, 128, stride=2)\n",
    "        self.layer4 = ResidualBlock(128, 256, stride=2)\n",
    "        \n",
    "        self.avgpool = nn.AdaptiveAvgPool2d((1, 1))\n",
    "        self.fc = nn.Linear(256, num_classes)\n",
    "    \n",
    "    def forward(self, x):\n",
    "        \n",
    "        # 输入卷积层\n",
    "        x = self.conv1(x)\n",
    "        x = self.bn1(x)\n",
    "        x = self.relu(x)\n",
    "        x = self.maxpool(x)\n",
    "        \n",
    "        # 8 层卷积\n",
    "        x = self.layer1(x)\n",
    "        x = self.layer2(x)\n",
    "        x = self.layer3(x)\n",
    "        x = self.layer4(x)\n",
    "\n",
    "        x = self.avgpool(x)\n",
    "        x = torch.flatten(x, 1)     # 展平给全连接层\n",
    "        x = self.fc(x)\n",
    "\n",
    "        return x"
   ],
   "id": "fc46f34a97347d00",
   "outputs": [],
   "execution_count": 5
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": "### 训练验证模块",
   "id": "454f68672712a10f"
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-05-10T04:47:12.868576Z",
     "start_time": "2025-05-10T04:47:12.862564Z"
    }
   },
   "cell_type": "code",
   "source": [
    "def train_phase(model, train_loader, val_loader, optimizer, criterion, num_epochs, save_path, freeze_features=True):\n",
    "    # 选择 GPU 设备\n",
    "    device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')\n",
    "    model = model.to(device)\n",
    "    best_acc = 0.0\n",
    "    \n",
    "    # 设置参数冻结状态\n",
    "    for name, param in model.named_parameters():\n",
    "        if 'fc' not in name and 'conv1.weight' != name:\n",
    "            param.requires_grad = not freeze_features\n",
    "    \n",
    "    print('Phase Training Start\\n')\n",
    "    for epoch in range(num_epochs):\n",
    "        # 训练模块\n",
    "        model.train()\n",
    "        train_cost = 0.0\n",
    "        train_correct = 0\n",
    "        for images, labels in train_loader:\n",
    "            images, labels = images.to(device), labels.to(device)\n",
    "            \n",
    "            optimizer.zero_grad()\n",
    "            outputs = model(images)\n",
    "            loss = criterion(outputs, labels)\n",
    "            loss.backward()\n",
    "            optimizer.step()\n",
    "            \n",
    "            _, pred = outputs.max(1)\n",
    "            train_cost += loss.item() * labels.size(0)\n",
    "            train_correct += (pred == labels).sum().item()\n",
    "        \n",
    "        # 验证模块\n",
    "        model.eval()\n",
    "        val_cost = 0.0\n",
    "        val_correct = 0\n",
    "        for images, labels in val_loader:\n",
    "            images, labels = images.to(device), labels.to(device)\n",
    "            \n",
    "            outputs = model(images)\n",
    "            loss = criterion(outputs, labels)\n",
    "            \n",
    "            _, pred = outputs.max(1)\n",
    "            val_cost += loss.item() * labels.size(0)\n",
    "            val_correct += (pred == labels).sum().item()\n",
    "        \n",
    "        # 计算统计量\n",
    "        train_loss = train_cost / len(train_loader.dataset)\n",
    "        train_acc = 100 * train_correct / len(train_loader.dataset)\n",
    "        val_loss = val_cost / len(val_loader.dataset)\n",
    "        val_acc = 100 * val_correct / len(val_loader.dataset)\n",
    "        \n",
    "        # 输出日志\n",
    "        print(f'Epoch [{epoch + 1}/{num_epochs}]')\n",
    "        print('-' * 10)\n",
    "        print(f'Train >> Loss: {train_loss:.4f} Acc: {train_acc:.2f}%')\n",
    "        print(f'Val >> Loss: {val_loss:.4f} Acc: {val_acc:.2f}%\\n')\n",
    "        \n",
    "        # 保存验证集上最好的模型\n",
    "        if val_acc > best_acc:\n",
    "            best_acc = val_acc\n",
    "            torch.save(model.state_dict(), save_path)\n",
    "        \n",
    "    print(f'Best model save at {save_path} (Acc: {best_acc:.2f}%)')"
   ],
   "id": "36e97212076c9a5a",
   "outputs": [],
   "execution_count": 6
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": "### 测试模块",
   "id": "23e4a657d453ecb6"
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-05-10T04:47:13.131663Z",
     "start_time": "2025-05-10T04:47:13.128442Z"
    }
   },
   "cell_type": "code",
   "source": [
    "def reverse_transform(processed_tensor):\n",
    "    # 反归一化\n",
    "    mean = torch.tensor((0.1307, )).view(1, 1, 1)\n",
    "    std = torch.tensor((0.3081, )).view(1, 1, 1)\n",
    "    tensor = processed_tensor * std + mean\n",
    "    # 将数值裁剪到合理范围 [0, 1]\n",
    "    tensor = torch.clamp(tensor, 0, 1)\n",
    "    # 转换为 PIL 图像\n",
    "    return transforms.ToPILImage()(tensor)"
   ],
   "id": "f428dbe3bbf33ef0",
   "outputs": [],
   "execution_count": 7
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-05-10T04:47:13.566745Z",
     "start_time": "2025-05-10T04:47:13.561565Z"
    }
   },
   "cell_type": "code",
   "source": [
    "def test_phase(model, test_loader):\n",
    "    device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')\n",
    "    model = model.to(device)\n",
    "    model.eval()\n",
    "    \n",
    "    # 预测并可视化\n",
    "    correct = 0\n",
    "    count = 0\n",
    "    random_i = np.random.choice(len(test_loader), 30, replace=False)       # 确保不生成重复索引\n",
    "    plt.figure(figsize=(12, 4))\n",
    "    with torch.no_grad():\n",
    "        for i, (images, labels) in enumerate(test_loader):\n",
    "            images, labels = images.to(device), labels.to(device)\n",
    "            \n",
    "            outputs = model(images)\n",
    "            \n",
    "            _, pred = outputs.max(1)\n",
    "            correct += (pred == labels).sum().item()\n",
    "            \n",
    "            if i in random_i:\n",
    "                idx = np.random.randint(0, images.size(0), 1)[0]\n",
    "                # 后续需要执行 CPU 操作，如 reverse_transform 中的 ToPILImage() ，必须先用 .cpu() 将张量移回 CPU\n",
    "                image = reverse_transform(images[idx].cpu())\n",
    "                plt.subplot(3, 10, 1 + count)\n",
    "                plt.imshow(image, cmap='gray')\n",
    "                plt.title(\n",
    "                    f'{labels[idx].item()}({pred[idx].item()})', \n",
    "                    color='green' if labels[idx] == pred[idx] else 'red'\n",
    "                )\n",
    "                plt.axis('off')\n",
    "                count += 1\n",
    "    \n",
    "    plt.tight_layout()\n",
    "    print(f'Test Accuracy: {100 * correct / len(test_loader.dataset):.2f}%')"
   ],
   "id": "a235ab76b17184a8",
   "outputs": [],
   "execution_count": 8
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": "### 结果输出模块",
   "id": "3dd6cbdf982b9b63"
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-05-10T04:47:14.173443Z",
     "start_time": "2025-05-10T04:47:14.169786Z"
    }
   },
   "cell_type": "code",
   "source": [
    "def result(model, test_loader, save_path):\n",
    "    device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')\n",
    "    model = model.to(device)\n",
    "    model.eval()\n",
    "    \n",
    "    # 预测\n",
    "    predicts = []\n",
    "    with torch.no_grad():\n",
    "        for images in test_loader:\n",
    "            images = images.to(device)\n",
    "            outputs = model(images)\n",
    "            _, pred = outputs.max(1)\n",
    "            predicts += pred.tolist()\n",
    "    \n",
    "    # 保存\n",
    "    result_data = pd.DataFrame({\n",
    "        'ImageId': range(1, len(predicts) + 1), \n",
    "        'Label': predicts\n",
    "    })\n",
    "    result_data.to_csv(save_path, index=False)"
   ],
   "id": "4785443f6b19b6b6",
   "outputs": [],
   "execution_count": 9
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": "## ResNet18 ",
   "id": "9f09008a5c7165f8"
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": "### 载入数据",
   "id": "6fed05f4c206fb9b"
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-05-10T04:47:15.926069Z",
     "start_time": "2025-05-10T04:47:15.921344Z"
    }
   },
   "cell_type": "code",
   "source": [
    "# 归一化\n",
    "train_transform = transforms.Compose([\n",
    "    transforms.ToPILImage(),                                # 将 NumPy 数组转为 PIL 图像\n",
    "    transforms.Resize(32),                                  # 上采样为 32 * 32\n",
    "    transforms.RandomRotation(10),                          # 随机旋转 10%\n",
    "    transforms.RandomAffine(0, translate=(0.05, 0.05)),     # 不旋转，随机在宽度和高度的方向上各平移不超过10%的范围\n",
    "    transforms.RandomResizedCrop(32, scale=(0.9, 1.1)),     # 裁剪图像的随机部分并将其调整为给定大小。\n",
    "    transforms.ToTensor(), \n",
    "    transforms.Normalize((0.1307, ), (0.3081, ))\n",
    "])"
   ],
   "id": "dfd6ff10245ea2f7",
   "outputs": [],
   "execution_count": 10
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-05-10T04:47:18.689021Z",
     "start_time": "2025-05-10T04:47:16.701010Z"
    }
   },
   "cell_type": "code",
   "source": [
    "# DataLoader 类型\n",
    "Train_Loader, Val_Loader = load_data('./../data/train.csv', train_transform, 64)"
   ],
   "id": "5fcc74444321b912",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<Figure size 1200x400 with 30 Axes>"
      ],
      "image/png": "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"
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "execution_count": 11
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": "### 创建 ResNet18 模型",
   "id": "a05b754bd2e03007"
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-05-10T04:47:19.514200Z",
     "start_time": "2025-05-10T04:47:19.362342Z"
    }
   },
   "cell_type": "code",
   "source": [
    "# MNIST 为灰度图，输入通道数为 1，共 10 个类型\n",
    "phase1_model = create_model(num_channels=1, num_classes=10)\n",
    "phase1_model"
   ],
   "id": "9395f896c1d970bc",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "ResNet(\n",
       "  (conv1): Conv2d(1, 64, kernel_size=(7, 7), stride=(2, 2), padding=(3, 3), bias=False)\n",
       "  (bn1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "  (relu): ReLU(inplace=True)\n",
       "  (maxpool): MaxPool2d(kernel_size=3, stride=2, padding=1, dilation=1, ceil_mode=False)\n",
       "  (layer1): Sequential(\n",
       "    (0): BasicBlock(\n",
       "      (conv1): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "      (bn1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "      (relu): ReLU(inplace=True)\n",
       "      (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "      (bn2): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "    )\n",
       "    (1): BasicBlock(\n",
       "      (conv1): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "      (bn1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "      (relu): ReLU(inplace=True)\n",
       "      (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "      (bn2): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "    )\n",
       "  )\n",
       "  (layer2): Sequential(\n",
       "    (0): BasicBlock(\n",
       "      (conv1): Conv2d(64, 128, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n",
       "      (bn1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "      (relu): ReLU(inplace=True)\n",
       "      (conv2): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "      (bn2): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "      (downsample): Sequential(\n",
       "        (0): Conv2d(64, 128, kernel_size=(1, 1), stride=(2, 2), bias=False)\n",
       "        (1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "      )\n",
       "    )\n",
       "    (1): BasicBlock(\n",
       "      (conv1): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "      (bn1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "      (relu): ReLU(inplace=True)\n",
       "      (conv2): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "      (bn2): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "    )\n",
       "  )\n",
       "  (layer3): Sequential(\n",
       "    (0): BasicBlock(\n",
       "      (conv1): Conv2d(128, 256, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n",
       "      (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "      (relu): ReLU(inplace=True)\n",
       "      (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "      (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "      (downsample): Sequential(\n",
       "        (0): Conv2d(128, 256, kernel_size=(1, 1), stride=(2, 2), bias=False)\n",
       "        (1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "      )\n",
       "    )\n",
       "    (1): BasicBlock(\n",
       "      (conv1): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "      (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "      (relu): ReLU(inplace=True)\n",
       "      (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "      (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "    )\n",
       "  )\n",
       "  (layer4): Sequential(\n",
       "    (0): BasicBlock(\n",
       "      (conv1): Conv2d(256, 512, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n",
       "      (bn1): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "      (relu): ReLU(inplace=True)\n",
       "      (conv2): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "      (bn2): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "      (downsample): Sequential(\n",
       "        (0): Conv2d(256, 512, kernel_size=(1, 1), stride=(2, 2), bias=False)\n",
       "        (1): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "      )\n",
       "    )\n",
       "    (1): BasicBlock(\n",
       "      (conv1): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "      (bn1): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "      (relu): ReLU(inplace=True)\n",
       "      (conv2): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "      (bn2): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "    )\n",
       "  )\n",
       "  (avgpool): AdaptiveAvgPool2d(output_size=(1, 1))\n",
       "  (fc): Linear(in_features=512, out_features=10, bias=True)\n",
       ")"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 12
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": "### 进行第一阶段训练",
   "id": "3b52c434a0af31b8"
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-05-10T05:49:07.018271Z",
     "start_time": "2025-05-10T04:47:22.119915Z"
    }
   },
   "cell_type": "code",
   "source": [
    "# 训练第一层卷积和全连接层\n",
    "train_phase(\n",
    "    phase1_model, Train_Loader, Val_Loader, \n",
    "    optimizer=optim.Adam(phase1_model.parameters(), lr=0.001, weight_decay=1e-4), \n",
    "    criterion=nn.CrossEntropyLoss(), \n",
    "    num_epochs=100, \n",
    "    save_path='./../data/best_conv1_fc.pth', \n",
    "    freeze_features=True\n",
    ")"
   ],
   "id": "c01390a32a165281",
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Phase Training Start\n",
      "\n",
      "Epoch [1/100]\n",
      "----------\n",
      "Train >> Loss: 1.1721 Acc: 62.06%\n",
      "Val >> Loss: 0.7860 Acc: 75.64%\n",
      "\n",
      "Epoch [2/100]\n",
      "----------\n",
      "Train >> Loss: 0.7115 Acc: 77.86%\n",
      "Val >> Loss: 0.5949 Acc: 81.46%\n",
      "\n",
      "Epoch [3/100]\n",
      "----------\n",
      "Train >> Loss: 0.6179 Acc: 80.71%\n",
      "Val >> Loss: 0.5414 Acc: 83.36%\n",
      "\n",
      "Epoch [4/100]\n",
      "----------\n",
      "Train >> Loss: 0.5698 Acc: 82.23%\n",
      "Val >> Loss: 0.5025 Acc: 84.57%\n",
      "\n",
      "Epoch [5/100]\n",
      "----------\n",
      "Train >> Loss: 0.5323 Acc: 83.28%\n",
      "Val >> Loss: 0.4795 Acc: 85.38%\n",
      "\n",
      "Epoch [6/100]\n",
      "----------\n",
      "Train >> Loss: 0.5144 Acc: 84.30%\n",
      "Val >> Loss: 0.4587 Acc: 86.25%\n",
      "\n",
      "Epoch [7/100]\n",
      "----------\n",
      "Train >> Loss: 0.5044 Acc: 84.39%\n",
      "Val >> Loss: 0.4577 Acc: 86.01%\n",
      "\n",
      "Epoch [8/100]\n",
      "----------\n",
      "Train >> Loss: 0.4816 Acc: 85.17%\n",
      "Val >> Loss: 0.4302 Acc: 86.99%\n",
      "\n",
      "Epoch [9/100]\n",
      "----------\n",
      "Train >> Loss: 0.4835 Acc: 85.14%\n",
      "Val >> Loss: 0.4266 Acc: 87.36%\n",
      "\n",
      "Epoch [10/100]\n",
      "----------\n",
      "Train >> Loss: 0.4689 Acc: 85.41%\n",
      "Val >> Loss: 0.4117 Acc: 87.15%\n",
      "\n",
      "Epoch [11/100]\n",
      "----------\n",
      "Train >> Loss: 0.4591 Acc: 85.89%\n",
      "Val >> Loss: 0.4113 Acc: 87.74%\n",
      "\n",
      "Epoch [12/100]\n",
      "----------\n",
      "Train >> Loss: 0.4555 Acc: 86.03%\n",
      "Val >> Loss: 0.4261 Acc: 86.99%\n",
      "\n",
      "Epoch [13/100]\n",
      "----------\n",
      "Train >> Loss: 0.4485 Acc: 86.14%\n",
      "Val >> Loss: 0.3875 Acc: 88.20%\n",
      "\n",
      "Epoch [14/100]\n",
      "----------\n",
      "Train >> Loss: 0.4377 Acc: 86.55%\n",
      "Val >> Loss: 0.3861 Acc: 88.26%\n",
      "\n",
      "Epoch [15/100]\n",
      "----------\n",
      "Train >> Loss: 0.4376 Acc: 86.49%\n",
      "Val >> Loss: 0.3790 Acc: 88.56%\n",
      "\n",
      "Epoch [16/100]\n",
      "----------\n",
      "Train >> Loss: 0.4333 Acc: 86.70%\n",
      "Val >> Loss: 0.3771 Acc: 88.32%\n",
      "\n",
      "Epoch [17/100]\n",
      "----------\n",
      "Train >> Loss: 0.4306 Acc: 86.74%\n",
      "Val >> Loss: 0.3790 Acc: 88.88%\n",
      "\n",
      "Epoch [18/100]\n",
      "----------\n",
      "Train >> Loss: 0.4283 Acc: 87.03%\n",
      "Val >> Loss: 0.3791 Acc: 88.07%\n",
      "\n",
      "Epoch [19/100]\n",
      "----------\n",
      "Train >> Loss: 0.4190 Acc: 87.27%\n",
      "Val >> Loss: 0.3809 Acc: 88.52%\n",
      "\n",
      "Epoch [20/100]\n",
      "----------\n",
      "Train >> Loss: 0.4176 Acc: 87.10%\n",
      "Val >> Loss: 0.3981 Acc: 88.37%\n",
      "\n",
      "Epoch [21/100]\n",
      "----------\n",
      "Train >> Loss: 0.4172 Acc: 87.17%\n",
      "Val >> Loss: 0.3604 Acc: 89.17%\n",
      "\n",
      "Epoch [22/100]\n",
      "----------\n",
      "Train >> Loss: 0.4116 Acc: 87.39%\n",
      "Val >> Loss: 0.3438 Acc: 89.50%\n",
      "\n",
      "Epoch [23/100]\n",
      "----------\n",
      "Train >> Loss: 0.4215 Acc: 87.05%\n",
      "Val >> Loss: 0.3592 Acc: 89.32%\n",
      "\n",
      "Epoch [24/100]\n",
      "----------\n",
      "Train >> Loss: 0.4060 Acc: 87.51%\n",
      "Val >> Loss: 0.3551 Acc: 89.48%\n",
      "\n",
      "Epoch [25/100]\n",
      "----------\n",
      "Train >> Loss: 0.3983 Acc: 87.69%\n",
      "Val >> Loss: 0.3412 Acc: 89.50%\n",
      "\n",
      "Epoch [26/100]\n",
      "----------\n",
      "Train >> Loss: 0.4070 Acc: 87.57%\n",
      "Val >> Loss: 0.3508 Acc: 89.44%\n",
      "\n",
      "Epoch [27/100]\n",
      "----------\n",
      "Train >> Loss: 0.4127 Acc: 87.29%\n",
      "Val >> Loss: 0.3291 Acc: 90.55%\n",
      "\n",
      "Epoch [28/100]\n",
      "----------\n",
      "Train >> Loss: 0.3949 Acc: 88.05%\n",
      "Val >> Loss: 0.3489 Acc: 89.93%\n",
      "\n",
      "Epoch [29/100]\n",
      "----------\n",
      "Train >> Loss: 0.4044 Acc: 87.77%\n",
      "Val >> Loss: 0.3222 Acc: 90.12%\n",
      "\n",
      "Epoch [30/100]\n",
      "----------\n",
      "Train >> Loss: 0.3980 Acc: 87.78%\n",
      "Val >> Loss: 0.3247 Acc: 89.96%\n",
      "\n",
      "Epoch [31/100]\n",
      "----------\n",
      "Train >> Loss: 0.3930 Acc: 87.92%\n",
      "Val >> Loss: 0.3403 Acc: 89.71%\n",
      "\n",
      "Epoch [32/100]\n",
      "----------\n",
      "Train >> Loss: 0.3876 Acc: 88.26%\n",
      "Val >> Loss: 0.3445 Acc: 89.76%\n",
      "\n",
      "Epoch [33/100]\n",
      "----------\n",
      "Train >> Loss: 0.3893 Acc: 87.96%\n",
      "Val >> Loss: 0.3499 Acc: 89.49%\n",
      "\n",
      "Epoch [34/100]\n",
      "----------\n",
      "Train >> Loss: 0.3947 Acc: 87.94%\n",
      "Val >> Loss: 0.3363 Acc: 90.18%\n",
      "\n",
      "Epoch [35/100]\n",
      "----------\n",
      "Train >> Loss: 0.3997 Acc: 87.78%\n",
      "Val >> Loss: 0.3426 Acc: 89.85%\n",
      "\n",
      "Epoch [36/100]\n",
      "----------\n",
      "Train >> Loss: 0.3906 Acc: 88.05%\n",
      "Val >> Loss: 0.3170 Acc: 90.55%\n",
      "\n",
      "Epoch [37/100]\n",
      "----------\n",
      "Train >> Loss: 0.3994 Acc: 87.88%\n",
      "Val >> Loss: 0.3118 Acc: 90.73%\n",
      "\n",
      "Epoch [38/100]\n",
      "----------\n",
      "Train >> Loss: 0.3951 Acc: 88.12%\n",
      "Val >> Loss: 0.3323 Acc: 90.02%\n",
      "\n",
      "Epoch [39/100]\n",
      "----------\n",
      "Train >> Loss: 0.3763 Acc: 88.36%\n",
      "Val >> Loss: 0.3196 Acc: 90.50%\n",
      "\n",
      "Epoch [40/100]\n",
      "----------\n",
      "Train >> Loss: 0.3858 Acc: 88.36%\n",
      "Val >> Loss: 0.3313 Acc: 89.79%\n",
      "\n",
      "Epoch [41/100]\n",
      "----------\n",
      "Train >> Loss: 0.3931 Acc: 87.92%\n",
      "Val >> Loss: 0.3424 Acc: 89.67%\n",
      "\n",
      "Epoch [42/100]\n",
      "----------\n",
      "Train >> Loss: 0.3902 Acc: 88.14%\n",
      "Val >> Loss: 0.3328 Acc: 90.21%\n",
      "\n",
      "Epoch [43/100]\n",
      "----------\n",
      "Train >> Loss: 0.3896 Acc: 88.15%\n",
      "Val >> Loss: 0.3342 Acc: 89.86%\n",
      "\n",
      "Epoch [44/100]\n",
      "----------\n",
      "Train >> Loss: 0.3806 Acc: 88.47%\n",
      "Val >> Loss: 0.3125 Acc: 90.76%\n",
      "\n",
      "Epoch [45/100]\n",
      "----------\n",
      "Train >> Loss: 0.3780 Acc: 88.48%\n",
      "Val >> Loss: 0.3309 Acc: 90.23%\n",
      "\n",
      "Epoch [46/100]\n",
      "----------\n",
      "Train >> Loss: 0.3769 Acc: 88.49%\n",
      "Val >> Loss: 0.3093 Acc: 90.40%\n",
      "\n",
      "Epoch [47/100]\n",
      "----------\n",
      "Train >> Loss: 0.3786 Acc: 88.66%\n",
      "Val >> Loss: 0.3179 Acc: 90.35%\n",
      "\n",
      "Epoch [48/100]\n",
      "----------\n",
      "Train >> Loss: 0.3740 Acc: 88.57%\n",
      "Val >> Loss: 0.3257 Acc: 90.42%\n",
      "\n",
      "Epoch [49/100]\n",
      "----------\n",
      "Train >> Loss: 0.3873 Acc: 88.38%\n",
      "Val >> Loss: 0.3179 Acc: 90.32%\n",
      "\n",
      "Epoch [50/100]\n",
      "----------\n",
      "Train >> Loss: 0.3767 Acc: 88.59%\n",
      "Val >> Loss: 0.3024 Acc: 90.86%\n",
      "\n",
      "Epoch [51/100]\n",
      "----------\n",
      "Train >> Loss: 0.3789 Acc: 88.54%\n",
      "Val >> Loss: 0.3153 Acc: 90.25%\n",
      "\n",
      "Epoch [52/100]\n",
      "----------\n",
      "Train >> Loss: 0.3709 Acc: 88.80%\n",
      "Val >> Loss: 0.3043 Acc: 90.67%\n",
      "\n",
      "Epoch [53/100]\n",
      "----------\n",
      "Train >> Loss: 0.3701 Acc: 88.79%\n",
      "Val >> Loss: 0.3247 Acc: 90.40%\n",
      "\n",
      "Epoch [54/100]\n",
      "----------\n",
      "Train >> Loss: 0.3702 Acc: 88.68%\n",
      "Val >> Loss: 0.3231 Acc: 90.60%\n",
      "\n",
      "Epoch [55/100]\n",
      "----------\n",
      "Train >> Loss: 0.3780 Acc: 88.53%\n",
      "Val >> Loss: 0.3119 Acc: 90.55%\n",
      "\n",
      "Epoch [56/100]\n",
      "----------\n",
      "Train >> Loss: 0.3691 Acc: 88.67%\n",
      "Val >> Loss: 0.2982 Acc: 91.29%\n",
      "\n",
      "Epoch [57/100]\n",
      "----------\n",
      "Train >> Loss: 0.3665 Acc: 88.89%\n",
      "Val >> Loss: 0.3099 Acc: 91.32%\n",
      "\n",
      "Epoch [58/100]\n",
      "----------\n",
      "Train >> Loss: 0.3621 Acc: 88.93%\n",
      "Val >> Loss: 0.3271 Acc: 90.23%\n",
      "\n",
      "Epoch [59/100]\n",
      "----------\n",
      "Train >> Loss: 0.3694 Acc: 88.59%\n",
      "Val >> Loss: 0.3209 Acc: 90.50%\n",
      "\n",
      "Epoch [60/100]\n",
      "----------\n",
      "Train >> Loss: 0.3715 Acc: 88.80%\n",
      "Val >> Loss: 0.3040 Acc: 90.85%\n",
      "\n",
      "Epoch [61/100]\n",
      "----------\n",
      "Train >> Loss: 0.3747 Acc: 88.77%\n",
      "Val >> Loss: 0.2982 Acc: 91.21%\n",
      "\n",
      "Epoch [62/100]\n",
      "----------\n",
      "Train >> Loss: 0.3572 Acc: 88.96%\n",
      "Val >> Loss: 0.2975 Acc: 91.18%\n",
      "\n",
      "Epoch [63/100]\n",
      "----------\n",
      "Train >> Loss: 0.3674 Acc: 88.79%\n",
      "Val >> Loss: 0.3161 Acc: 90.79%\n",
      "\n",
      "Epoch [64/100]\n",
      "----------\n",
      "Train >> Loss: 0.3700 Acc: 88.81%\n",
      "Val >> Loss: 0.3011 Acc: 90.82%\n",
      "\n",
      "Epoch [65/100]\n",
      "----------\n",
      "Train >> Loss: 0.3627 Acc: 88.99%\n",
      "Val >> Loss: 0.3107 Acc: 90.68%\n",
      "\n",
      "Epoch [66/100]\n",
      "----------\n",
      "Train >> Loss: 0.3627 Acc: 88.78%\n",
      "Val >> Loss: 0.3189 Acc: 90.74%\n",
      "\n",
      "Epoch [67/100]\n",
      "----------\n",
      "Train >> Loss: 0.3563 Acc: 89.11%\n",
      "Val >> Loss: 0.2802 Acc: 91.31%\n",
      "\n",
      "Epoch [68/100]\n",
      "----------\n",
      "Train >> Loss: 0.3589 Acc: 89.11%\n",
      "Val >> Loss: 0.3004 Acc: 91.00%\n",
      "\n",
      "Epoch [69/100]\n",
      "----------\n",
      "Train >> Loss: 0.3624 Acc: 88.99%\n",
      "Val >> Loss: 0.2828 Acc: 91.57%\n",
      "\n",
      "Epoch [70/100]\n",
      "----------\n",
      "Train >> Loss: 0.3622 Acc: 89.06%\n",
      "Val >> Loss: 0.2885 Acc: 91.37%\n",
      "\n",
      "Epoch [71/100]\n",
      "----------\n",
      "Train >> Loss: 0.3655 Acc: 88.99%\n",
      "Val >> Loss: 0.3165 Acc: 90.69%\n",
      "\n",
      "Epoch [72/100]\n",
      "----------\n",
      "Train >> Loss: 0.3533 Acc: 89.11%\n",
      "Val >> Loss: 0.3026 Acc: 90.98%\n",
      "\n",
      "Epoch [73/100]\n",
      "----------\n",
      "Train >> Loss: 0.3640 Acc: 89.19%\n",
      "Val >> Loss: 0.2993 Acc: 90.94%\n",
      "\n",
      "Epoch [74/100]\n",
      "----------\n",
      "Train >> Loss: 0.3532 Acc: 89.35%\n",
      "Val >> Loss: 0.2862 Acc: 91.49%\n",
      "\n",
      "Epoch [75/100]\n",
      "----------\n",
      "Train >> Loss: 0.3547 Acc: 89.21%\n",
      "Val >> Loss: 0.3128 Acc: 90.30%\n",
      "\n",
      "Epoch [76/100]\n",
      "----------\n",
      "Train >> Loss: 0.3650 Acc: 88.96%\n",
      "Val >> Loss: 0.3045 Acc: 91.01%\n",
      "\n",
      "Epoch [77/100]\n",
      "----------\n",
      "Train >> Loss: 0.3581 Acc: 89.32%\n",
      "Val >> Loss: 0.2909 Acc: 91.50%\n",
      "\n",
      "Epoch [78/100]\n",
      "----------\n",
      "Train >> Loss: 0.3722 Acc: 88.78%\n",
      "Val >> Loss: 0.2960 Acc: 91.01%\n",
      "\n",
      "Epoch [79/100]\n",
      "----------\n",
      "Train >> Loss: 0.3510 Acc: 89.36%\n",
      "Val >> Loss: 0.3032 Acc: 91.10%\n",
      "\n",
      "Epoch [80/100]\n",
      "----------\n",
      "Train >> Loss: 0.3575 Acc: 89.10%\n",
      "Val >> Loss: 0.2908 Acc: 91.45%\n",
      "\n",
      "Epoch [81/100]\n",
      "----------\n",
      "Train >> Loss: 0.3592 Acc: 89.13%\n",
      "Val >> Loss: 0.3028 Acc: 91.15%\n",
      "\n",
      "Epoch [82/100]\n",
      "----------\n",
      "Train >> Loss: 0.3508 Acc: 89.56%\n",
      "Val >> Loss: 0.3060 Acc: 90.88%\n",
      "\n",
      "Epoch [83/100]\n",
      "----------\n",
      "Train >> Loss: 0.3547 Acc: 89.19%\n",
      "Val >> Loss: 0.2880 Acc: 91.75%\n",
      "\n",
      "Epoch [84/100]\n",
      "----------\n",
      "Train >> Loss: 0.3558 Acc: 89.32%\n",
      "Val >> Loss: 0.3031 Acc: 91.12%\n",
      "\n",
      "Epoch [85/100]\n",
      "----------\n",
      "Train >> Loss: 0.3464 Acc: 89.35%\n",
      "Val >> Loss: 0.3146 Acc: 90.83%\n",
      "\n",
      "Epoch [86/100]\n",
      "----------\n",
      "Train >> Loss: 0.3484 Acc: 89.45%\n",
      "Val >> Loss: 0.3157 Acc: 90.87%\n",
      "\n",
      "Epoch [87/100]\n",
      "----------\n",
      "Train >> Loss: 0.3550 Acc: 89.31%\n",
      "Val >> Loss: 0.3068 Acc: 91.10%\n",
      "\n",
      "Epoch [88/100]\n",
      "----------\n",
      "Train >> Loss: 0.3462 Acc: 89.59%\n",
      "Val >> Loss: 0.3061 Acc: 90.95%\n",
      "\n",
      "Epoch [89/100]\n",
      "----------\n",
      "Train >> Loss: 0.3554 Acc: 89.21%\n",
      "Val >> Loss: 0.2904 Acc: 91.30%\n",
      "\n",
      "Epoch [90/100]\n",
      "----------\n",
      "Train >> Loss: 0.3549 Acc: 89.19%\n",
      "Val >> Loss: 0.3017 Acc: 91.40%\n",
      "\n",
      "Epoch [91/100]\n",
      "----------\n",
      "Train >> Loss: 0.3518 Acc: 89.28%\n",
      "Val >> Loss: 0.3030 Acc: 91.07%\n",
      "\n",
      "Epoch [92/100]\n",
      "----------\n",
      "Train >> Loss: 0.3447 Acc: 89.46%\n",
      "Val >> Loss: 0.3083 Acc: 90.36%\n",
      "\n",
      "Epoch [93/100]\n",
      "----------\n",
      "Train >> Loss: 0.3544 Acc: 89.44%\n",
      "Val >> Loss: 0.2907 Acc: 91.31%\n",
      "\n",
      "Epoch [94/100]\n",
      "----------\n",
      "Train >> Loss: 0.3424 Acc: 89.64%\n",
      "Val >> Loss: 0.2843 Acc: 91.46%\n",
      "\n",
      "Epoch [95/100]\n",
      "----------\n",
      "Train >> Loss: 0.3580 Acc: 89.10%\n",
      "Val >> Loss: 0.2787 Acc: 91.62%\n",
      "\n",
      "Epoch [96/100]\n",
      "----------\n",
      "Train >> Loss: 0.3497 Acc: 89.55%\n",
      "Val >> Loss: 0.2853 Acc: 91.63%\n",
      "\n",
      "Epoch [97/100]\n",
      "----------\n",
      "Train >> Loss: 0.3453 Acc: 89.53%\n",
      "Val >> Loss: 0.3073 Acc: 91.17%\n",
      "\n",
      "Epoch [98/100]\n",
      "----------\n",
      "Train >> Loss: 0.3501 Acc: 89.35%\n",
      "Val >> Loss: 0.3006 Acc: 91.30%\n",
      "\n",
      "Epoch [99/100]\n",
      "----------\n",
      "Train >> Loss: 0.3428 Acc: 89.49%\n",
      "Val >> Loss: 0.2835 Acc: 91.65%\n",
      "\n",
      "Epoch [100/100]\n",
      "----------\n",
      "Train >> Loss: 0.3420 Acc: 89.63%\n",
      "Val >> Loss: 0.3074 Acc: 91.38%\n",
      "\n",
      "Best model save at ./MNIST/best_conv1_fc.pth (Acc: 91.75%)\n"
     ]
    }
   ],
   "execution_count": 13
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": "### 进行第二阶段训练",
   "id": "d0c5ed2151e9724a"
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-05-10T06:19:52.384494Z",
     "start_time": "2025-05-10T05:49:07.019253Z"
    }
   },
   "cell_type": "code",
   "source": [
    "# 训练剩余卷积层进行微调\n",
    "phase2_model = create_model(num_channels=1, num_classes=10)\n",
    "phase2_model.load_state_dict(torch.load('./../data/best_conv1_fc.pth'))\n",
    "train_phase(\n",
    "    phase2_model, Train_Loader, Val_Loader, \n",
    "    optimizer=optim.Adam(phase2_model.parameters(), lr=0.0001, weight_decay=1e-4), \n",
    "    criterion=nn.CrossEntropyLoss(), \n",
    "    num_epochs=50, \n",
    "    save_path='./../data/best_all.pth', \n",
    "    freeze_features=False\n",
    ")"
   ],
   "id": "cd232dde1be2eeab",
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Phase Training Start\n",
      "\n",
      "Epoch [1/50]\n",
      "----------\n",
      "Train >> Loss: 0.1984 Acc: 94.47%\n",
      "Val >> Loss: 0.0767 Acc: 97.61%\n",
      "\n",
      "Epoch [2/50]\n",
      "----------\n",
      "Train >> Loss: 0.0951 Acc: 97.24%\n",
      "Val >> Loss: 0.0526 Acc: 98.49%\n",
      "\n",
      "Epoch [3/50]\n",
      "----------\n",
      "Train >> Loss: 0.0714 Acc: 97.92%\n",
      "Val >> Loss: 0.0539 Acc: 98.50%\n",
      "\n",
      "Epoch [4/50]\n",
      "----------\n",
      "Train >> Loss: 0.0644 Acc: 98.08%\n",
      "Val >> Loss: 0.0488 Acc: 98.55%\n",
      "\n",
      "Epoch [5/50]\n",
      "----------\n",
      "Train >> Loss: 0.0542 Acc: 98.26%\n",
      "Val >> Loss: 0.0420 Acc: 98.81%\n",
      "\n",
      "Epoch [6/50]\n",
      "----------\n",
      "Train >> Loss: 0.0465 Acc: 98.54%\n",
      "Val >> Loss: 0.0411 Acc: 98.71%\n",
      "\n",
      "Epoch [7/50]\n",
      "----------\n",
      "Train >> Loss: 0.0456 Acc: 98.59%\n",
      "Val >> Loss: 0.0384 Acc: 98.79%\n",
      "\n",
      "Epoch [8/50]\n",
      "----------\n",
      "Train >> Loss: 0.0425 Acc: 98.74%\n",
      "Val >> Loss: 0.0387 Acc: 98.82%\n",
      "\n",
      "Epoch [9/50]\n",
      "----------\n",
      "Train >> Loss: 0.0373 Acc: 98.92%\n",
      "Val >> Loss: 0.0390 Acc: 98.85%\n",
      "\n",
      "Epoch [10/50]\n",
      "----------\n",
      "Train >> Loss: 0.0368 Acc: 98.90%\n",
      "Val >> Loss: 0.0355 Acc: 98.92%\n",
      "\n",
      "Epoch [11/50]\n",
      "----------\n",
      "Train >> Loss: 0.0381 Acc: 98.87%\n",
      "Val >> Loss: 0.0348 Acc: 98.95%\n",
      "\n",
      "Epoch [12/50]\n",
      "----------\n",
      "Train >> Loss: 0.0322 Acc: 99.01%\n",
      "Val >> Loss: 0.0404 Acc: 98.90%\n",
      "\n",
      "Epoch [13/50]\n",
      "----------\n",
      "Train >> Loss: 0.0297 Acc: 99.07%\n",
      "Val >> Loss: 0.0358 Acc: 99.02%\n",
      "\n",
      "Epoch [14/50]\n",
      "----------\n",
      "Train >> Loss: 0.0277 Acc: 99.15%\n",
      "Val >> Loss: 0.0526 Acc: 98.36%\n",
      "\n",
      "Epoch [15/50]\n",
      "----------\n",
      "Train >> Loss: 0.0295 Acc: 99.07%\n",
      "Val >> Loss: 0.0364 Acc: 99.00%\n",
      "\n",
      "Epoch [16/50]\n",
      "----------\n",
      "Train >> Loss: 0.0255 Acc: 99.23%\n",
      "Val >> Loss: 0.0397 Acc: 98.88%\n",
      "\n",
      "Epoch [17/50]\n",
      "----------\n",
      "Train >> Loss: 0.0269 Acc: 99.21%\n",
      "Val >> Loss: 0.0356 Acc: 98.90%\n",
      "\n",
      "Epoch [18/50]\n",
      "----------\n",
      "Train >> Loss: 0.0235 Acc: 99.26%\n",
      "Val >> Loss: 0.0320 Acc: 99.10%\n",
      "\n",
      "Epoch [19/50]\n",
      "----------\n",
      "Train >> Loss: 0.0251 Acc: 99.24%\n",
      "Val >> Loss: 0.0359 Acc: 99.07%\n",
      "\n",
      "Epoch [20/50]\n",
      "----------\n",
      "Train >> Loss: 0.0261 Acc: 99.20%\n",
      "Val >> Loss: 0.0278 Acc: 99.12%\n",
      "\n",
      "Epoch [21/50]\n",
      "----------\n",
      "Train >> Loss: 0.0202 Acc: 99.35%\n",
      "Val >> Loss: 0.0335 Acc: 99.07%\n",
      "\n",
      "Epoch [22/50]\n",
      "----------\n",
      "Train >> Loss: 0.0200 Acc: 99.38%\n",
      "Val >> Loss: 0.0474 Acc: 98.67%\n",
      "\n",
      "Epoch [23/50]\n",
      "----------\n",
      "Train >> Loss: 0.0208 Acc: 99.37%\n",
      "Val >> Loss: 0.0261 Acc: 99.07%\n",
      "\n",
      "Epoch [24/50]\n",
      "----------\n",
      "Train >> Loss: 0.0226 Acc: 99.28%\n",
      "Val >> Loss: 0.0287 Acc: 99.06%\n",
      "\n",
      "Epoch [25/50]\n",
      "----------\n",
      "Train >> Loss: 0.0175 Acc: 99.47%\n",
      "Val >> Loss: 0.0311 Acc: 98.99%\n",
      "\n",
      "Epoch [26/50]\n",
      "----------\n",
      "Train >> Loss: 0.0186 Acc: 99.42%\n",
      "Val >> Loss: 0.0234 Acc: 99.30%\n",
      "\n",
      "Epoch [27/50]\n",
      "----------\n",
      "Train >> Loss: 0.0179 Acc: 99.40%\n",
      "Val >> Loss: 0.0351 Acc: 99.04%\n",
      "\n",
      "Epoch [28/50]\n",
      "----------\n",
      "Train >> Loss: 0.0177 Acc: 99.41%\n",
      "Val >> Loss: 0.0311 Acc: 99.04%\n",
      "\n",
      "Epoch [29/50]\n",
      "----------\n",
      "Train >> Loss: 0.0175 Acc: 99.46%\n",
      "Val >> Loss: 0.0414 Acc: 98.79%\n",
      "\n",
      "Epoch [30/50]\n",
      "----------\n",
      "Train >> Loss: 0.0178 Acc: 99.48%\n",
      "Val >> Loss: 0.0265 Acc: 99.24%\n",
      "\n",
      "Epoch [31/50]\n",
      "----------\n",
      "Train >> Loss: 0.0162 Acc: 99.48%\n",
      "Val >> Loss: 0.0305 Acc: 99.04%\n",
      "\n",
      "Epoch [32/50]\n",
      "----------\n",
      "Train >> Loss: 0.0156 Acc: 99.52%\n",
      "Val >> Loss: 0.0316 Acc: 99.18%\n",
      "\n",
      "Epoch [33/50]\n",
      "----------\n",
      "Train >> Loss: 0.0159 Acc: 99.49%\n",
      "Val >> Loss: 0.0291 Acc: 99.23%\n",
      "\n",
      "Epoch [34/50]\n",
      "----------\n",
      "Train >> Loss: 0.0145 Acc: 99.55%\n",
      "Val >> Loss: 0.0302 Acc: 99.14%\n",
      "\n",
      "Epoch [35/50]\n",
      "----------\n",
      "Train >> Loss: 0.0140 Acc: 99.53%\n",
      "Val >> Loss: 0.0252 Acc: 99.23%\n",
      "\n",
      "Epoch [36/50]\n",
      "----------\n",
      "Train >> Loss: 0.0151 Acc: 99.51%\n",
      "Val >> Loss: 0.0398 Acc: 98.85%\n",
      "\n",
      "Epoch [37/50]\n",
      "----------\n",
      "Train >> Loss: 0.0160 Acc: 99.51%\n",
      "Val >> Loss: 0.0309 Acc: 99.13%\n",
      "\n",
      "Epoch [38/50]\n",
      "----------\n",
      "Train >> Loss: 0.0136 Acc: 99.57%\n",
      "Val >> Loss: 0.0268 Acc: 99.24%\n",
      "\n",
      "Epoch [39/50]\n",
      "----------\n",
      "Train >> Loss: 0.0145 Acc: 99.57%\n",
      "Val >> Loss: 0.0268 Acc: 99.20%\n",
      "\n",
      "Epoch [40/50]\n",
      "----------\n",
      "Train >> Loss: 0.0148 Acc: 99.51%\n",
      "Val >> Loss: 0.0291 Acc: 99.10%\n",
      "\n",
      "Epoch [41/50]\n",
      "----------\n",
      "Train >> Loss: 0.0127 Acc: 99.62%\n",
      "Val >> Loss: 0.0260 Acc: 99.24%\n",
      "\n",
      "Epoch [42/50]\n",
      "----------\n",
      "Train >> Loss: 0.0154 Acc: 99.55%\n",
      "Val >> Loss: 0.0245 Acc: 99.20%\n",
      "\n",
      "Epoch [43/50]\n",
      "----------\n",
      "Train >> Loss: 0.0132 Acc: 99.61%\n",
      "Val >> Loss: 0.0333 Acc: 99.07%\n",
      "\n",
      "Epoch [44/50]\n",
      "----------\n",
      "Train >> Loss: 0.0127 Acc: 99.60%\n",
      "Val >> Loss: 0.0265 Acc: 99.27%\n",
      "\n",
      "Epoch [45/50]\n",
      "----------\n",
      "Train >> Loss: 0.0130 Acc: 99.61%\n",
      "Val >> Loss: 0.0258 Acc: 99.27%\n",
      "\n",
      "Epoch [46/50]\n",
      "----------\n",
      "Train >> Loss: 0.0128 Acc: 99.59%\n",
      "Val >> Loss: 0.0272 Acc: 99.21%\n",
      "\n",
      "Epoch [47/50]\n",
      "----------\n",
      "Train >> Loss: 0.0124 Acc: 99.59%\n",
      "Val >> Loss: 0.0253 Acc: 99.25%\n",
      "\n",
      "Epoch [48/50]\n",
      "----------\n",
      "Train >> Loss: 0.0108 Acc: 99.66%\n",
      "Val >> Loss: 0.0296 Acc: 99.20%\n",
      "\n",
      "Epoch [49/50]\n",
      "----------\n",
      "Train >> Loss: 0.0133 Acc: 99.58%\n",
      "Val >> Loss: 0.0254 Acc: 99.27%\n",
      "\n",
      "Epoch [50/50]\n",
      "----------\n",
      "Train >> Loss: 0.0116 Acc: 99.64%\n",
      "Val >> Loss: 0.0228 Acc: 99.36%\n",
      "\n",
      "Best model save at ./MNIST/best_all.pth (Acc: 99.36%)\n"
     ]
    }
   ],
   "execution_count": 14
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": "### 进行验证集测试",
   "id": "31226c328da6277f"
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-05-10T06:20:01.419091Z",
     "start_time": "2025-05-10T06:19:52.386457Z"
    }
   },
   "cell_type": "code",
   "source": [
    "val_model = create_model(num_channels=1, num_classes=10)\n",
    "val_model.load_state_dict(torch.load('./../data/best_all.pth'))\n",
    "test_phase(val_model, Val_Loader)"
   ],
   "id": "5b5557ba96928794",
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Test Accuracy: 99.29%\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "<Figure size 1200x400 with 30 Axes>"
      ],
      "image/png": "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"
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "execution_count": 15
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": "### 输出结果",
   "id": "6c0c973e4564d1fc"
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-05-10T06:20:01.427673Z",
     "start_time": "2025-05-10T06:20:01.422031Z"
    }
   },
   "cell_type": "code",
   "source": [
    "# 归一化\n",
    "test_transform = transforms.Compose([\n",
    "    transforms.ToPILImage(), \n",
    "    transforms.Resize(32), \n",
    "    transforms.ToTensor(), \n",
    "    transforms.Normalize((0.1307,), (0.3081,))\n",
    "])"
   ],
   "id": "b816dc6c58a2c331",
   "outputs": [],
   "execution_count": 16
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-05-10T06:20:11.895140Z",
     "start_time": "2025-05-10T06:20:01.428658Z"
    }
   },
   "cell_type": "code",
   "source": [
    "Test_Loader = load_data('./../data/test.csv', test_transform, 64, has_label=False)\n",
    "test_model = create_model(num_channels=1, num_classes=10)\n",
    "test_model.load_state_dict(torch.load('./../data/best_all.pth'))\n",
    "result(test_model, Test_Loader, './../data/result18.csv')"
   ],
   "id": "4f0a8c908e247ab1",
   "outputs": [],
   "execution_count": 17
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": "![](./../img/11.png)",
   "id": "3642349678923e5"
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": "## ResNet10",
   "id": "c623526639820442"
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": "### 载入数据",
   "id": "a35cf00c5fbd7fd4"
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-05-09T12:04:11.707934Z",
     "start_time": "2025-05-09T12:04:11.701517Z"
    }
   },
   "cell_type": "code",
   "source": [
    "# 归一化\n",
    "train_transform = transforms.Compose([\n",
    "    transforms.ToPILImage(),                                # 将 NumPy 数组转为 PIL 图像\n",
    "    transforms.Resize(32),                                  # 上采样为 32 * 32\n",
    "    transforms.RandomRotation(10),                          # 随机旋转 10%\n",
    "    transforms.RandomAffine(0, translate=(0.05, 0.05)),     # 不旋转，随机在宽度和高度的方向上各平移不超过10%的范围\n",
    "    transforms.RandomResizedCrop(32, scale=(0.9, 1.1)),     # 裁剪图像的随机部分并将其调整为给定大小。\n",
    "    transforms.ToTensor(), \n",
    "    transforms.Normalize((0.1307, ), (0.3081, ))\n",
    "])"
   ],
   "id": "35aac28242a1520a",
   "outputs": [],
   "execution_count": 18
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-05-09T12:04:13.558191Z",
     "start_time": "2025-05-09T12:04:11.708942Z"
    }
   },
   "cell_type": "code",
   "source": [
    "# DataLoader 类型\n",
    "Train_Loader, Val_Loader = load_data('./../data/train.csv', train_transform, 64)"
   ],
   "id": "a041931453b2e7a3",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<Figure size 1200x400 with 30 Axes>"
      ],
      "image/png": "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CkKA87E37dmzR06dOiVt27aV+Ph4OXv2rMydO1caNWok48aNk44dO7pdIoK0ePFiadiwoVSsWFH69Okj2bJlk99//1327dvndmkIga5du8qdd95p/KxEiRIuVYNQ4HPWu2L5fByXnJyc7HYR4TRo0CDp1auXbN68WW699Vb187Zt28rUqVPln3/+keuvv97FChGsCxcuyLFjxyR//vyybt06ufPOO2XSpEnSrl07t0tDKvz0009SuXJlGTJkiHTv3l1ERM6fPy9ly5aVfPnyyY8//uhyhQiFli1byuHDhyUpKUmOHDkimzdvdrskpALn49iRlJQklSpVkvPnz8v27dvdLgdBOHnypJQqVUqqVasmc+bMkTRpYmKhRExYvny53HvvvfLJJ59IQkKC2+UghPic9aZYPx97/k978uRJERG54YYbjJ8XKFBA0qRJIxkyZHCjLIRAxowZJX/+/G6XgRCbM2eOpE2b1vg/7pkyZZL27dvLqlWrZO/evS5Wh1D47rvvZM6cOTJixAi3S0GIcD6OHWnTppXChQvL8ePH3S4FQZoxY4b8/fffMnDgQEmTJo2cOXNGLl++7HZZCLFTp07JpUuX3C4DIcLnrDfF+vnY8xejatWqJSIi7du3l02bNsnevXtl1qxZ8v7770vXrl1ZIgJEmI0bN0qpUqUkR44cxs/vuusuERHZtGmTC1UhVJKSkqRLly7SoUMHKVeunNvlAAjAmTNn5MiRI/L777/L8OHDZeHChVK7dm23y0KQli5dKjly5JD9+/fLzTffLNmyZZMcOXLIM888I+fPn3e7PITAE088ITly5JBMmTLJvffeK+vWrXO7JABXEevnY8/3jKpXr570799fBg0aJF988YX6ea9evWTAgAEuVgbgag4ePCgFChS44uf//uzAgQNOl4QQGjt2rOzZs0eWLl3qdikAAvTSSy/JuHHjREQkTZo00rRpUxk9erTLVSFYv/32m1y6dEkaN24s7du3l7feekuWL18u7777rhw/flw+/vhjt0tEkDJkyCDNmjWT+vXrS548eWTr1q0ydOhQqV69uvz4449SsWJFt0sEoIn187HnL0aJiBQrVkxq1KghzZo1k9y5c8uCBQtk0KBBkj9/funcubPb5QHQnDt3TjJmzHjFzzNlyqTGEZ2OHj0qr7/+uvTp00fy5s3rdjkAAtStWzdJ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"
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "execution_count": 19
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": "### 创建 ResNet10 模型",
   "id": "cf5bf9ce6ab0ce12"
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-05-09T12:04:13.570357Z",
     "start_time": "2025-05-09T12:04:13.559307Z"
    }
   },
   "cell_type": "code",
   "source": [
    "# MNIST 为灰度图，输入通道数为 1，共 10 个类型\n",
    "phase_model = ResNet10(num_classes=10)\n",
    "phase_model"
   ],
   "id": "62d8e2823291500c",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "ResNet10(\n",
       "  (conv1): Conv2d(1, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "  (bn1): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "  (relu): ReLU(inplace=True)\n",
       "  (maxpool): MaxPool2d(kernel_size=3, stride=2, padding=1, dilation=1, ceil_mode=False)\n",
       "  (layer1): ResidualBlock(\n",
       "    (conv1): Conv2d(32, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "    (bn1): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "    (conv2): Conv2d(32, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "    (bn2): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "    (relu): ReLU(inplace=True)\n",
       "    (shortcut): Sequential()\n",
       "  )\n",
       "  (layer2): ResidualBlock(\n",
       "    (conv1): Conv2d(32, 64, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n",
       "    (bn1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "    (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "    (bn2): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "    (relu): ReLU(inplace=True)\n",
       "    (shortcut): Sequential(\n",
       "      (0): Conv2d(32, 64, kernel_size=(1, 1), stride=(2, 2), bias=False)\n",
       "      (1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "    )\n",
       "  )\n",
       "  (layer3): ResidualBlock(\n",
       "    (conv1): Conv2d(64, 128, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n",
       "    (bn1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "    (conv2): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "    (bn2): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "    (relu): ReLU(inplace=True)\n",
       "    (shortcut): Sequential(\n",
       "      (0): Conv2d(64, 128, kernel_size=(1, 1), stride=(2, 2), bias=False)\n",
       "      (1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "    )\n",
       "  )\n",
       "  (layer4): ResidualBlock(\n",
       "    (conv1): Conv2d(128, 256, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n",
       "    (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "    (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "    (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "    (relu): ReLU(inplace=True)\n",
       "    (shortcut): Sequential(\n",
       "      (0): Conv2d(128, 256, kernel_size=(1, 1), stride=(2, 2), bias=False)\n",
       "      (1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "    )\n",
       "  )\n",
       "  (avgpool): AdaptiveAvgPool2d(output_size=(1, 1))\n",
       "  (fc): Linear(in_features=256, out_features=10, bias=True)\n",
       ")"
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 20
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": "### 训练",
   "id": "908a1fb0758b983d"
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-05-09T12:52:03.229172Z",
     "start_time": "2025-05-09T12:04:13.571363Z"
    }
   },
   "cell_type": "code",
   "source": [
    "# 训练所有层\n",
    "train_phase(\n",
    "    phase_model, Train_Loader, Val_Loader, \n",
    "    optimizer=optim.Adam(phase_model.parameters(), lr=0.001, weight_decay=1e-4),\n",
    "    criterion=nn.CrossEntropyLoss(), \n",
    "    num_epochs=100, \n",
    "    save_path='./../data/best_10.pth', \n",
    "    freeze_features=False\n",
    ")"
   ],
   "id": "d6e25111b6281988",
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Phase Training Start\n",
      "\n",
      "Epoch [1/100]\n",
      "----------\n",
      "Train >> Loss: 0.1669 Acc: 94.93%\n",
      "Val >> Loss: 0.1205 Acc: 95.99%\n",
      "\n",
      "Epoch [2/100]\n",
      "----------\n",
      "Train >> Loss: 0.0735 Acc: 97.70%\n",
      "Val >> Loss: 0.0702 Acc: 97.76%\n",
      "\n",
      "Epoch [3/100]\n",
      "----------\n",
      "Train >> Loss: 0.0592 Acc: 98.18%\n",
      "Val >> Loss: 0.0503 Acc: 98.49%\n",
      "\n",
      "Epoch [4/100]\n",
      "----------\n",
      "Train >> Loss: 0.0519 Acc: 98.38%\n",
      "Val >> Loss: 0.0568 Acc: 98.12%\n",
      "\n",
      "Epoch [5/100]\n",
      "----------\n",
      "Train >> Loss: 0.0486 Acc: 98.49%\n",
      "Val >> Loss: 0.0508 Acc: 98.39%\n",
      "\n",
      "Epoch [6/100]\n",
      "----------\n",
      "Train >> Loss: 0.0472 Acc: 98.53%\n",
      "Val >> Loss: 0.0404 Acc: 98.68%\n",
      "\n",
      "Epoch [7/100]\n",
      "----------\n",
      "Train >> Loss: 0.0405 Acc: 98.76%\n",
      "Val >> Loss: 0.0443 Acc: 98.77%\n",
      "\n",
      "Epoch [8/100]\n",
      "----------\n",
      "Train >> Loss: 0.0439 Acc: 98.61%\n",
      "Val >> Loss: 0.0473 Acc: 98.44%\n",
      "\n",
      "Epoch [9/100]\n",
      "----------\n",
      "Train >> Loss: 0.0429 Acc: 98.67%\n",
      "Val >> Loss: 0.0368 Acc: 98.88%\n",
      "\n",
      "Epoch [10/100]\n",
      "----------\n",
      "Train >> Loss: 0.0408 Acc: 98.69%\n",
      "Val >> Loss: 0.0480 Acc: 98.74%\n",
      "\n",
      "Epoch [11/100]\n",
      "----------\n",
      "Train >> Loss: 0.0379 Acc: 98.85%\n",
      "Val >> Loss: 0.0372 Acc: 98.85%\n",
      "\n",
      "Epoch [12/100]\n",
      "----------\n",
      "Train >> Loss: 0.0378 Acc: 98.88%\n",
      "Val >> Loss: 0.0500 Acc: 98.43%\n",
      "\n",
      "Epoch [13/100]\n",
      "----------\n",
      "Train >> Loss: 0.0358 Acc: 98.93%\n",
      "Val >> Loss: 0.0448 Acc: 98.58%\n",
      "\n",
      "Epoch [14/100]\n",
      "----------\n",
      "Train >> Loss: 0.0369 Acc: 98.86%\n",
      "Val >> Loss: 0.0498 Acc: 98.49%\n",
      "\n",
      "Epoch [15/100]\n",
      "----------\n",
      "Train >> Loss: 0.0361 Acc: 98.86%\n",
      "Val >> Loss: 0.0311 Acc: 99.07%\n",
      "\n",
      "Epoch [16/100]\n",
      "----------\n",
      "Train >> Loss: 0.0313 Acc: 99.04%\n",
      "Val >> Loss: 0.0390 Acc: 98.88%\n",
      "\n",
      "Epoch [17/100]\n",
      "----------\n",
      "Train >> Loss: 0.0312 Acc: 99.02%\n",
      "Val >> Loss: 0.0365 Acc: 98.81%\n",
      "\n",
      "Epoch [18/100]\n",
      "----------\n",
      "Train >> Loss: 0.0331 Acc: 98.99%\n",
      "Val >> Loss: 0.0335 Acc: 98.93%\n",
      "\n",
      "Epoch [19/100]\n",
      "----------\n",
      "Train >> Loss: 0.0299 Acc: 99.06%\n",
      "Val >> Loss: 0.0357 Acc: 98.83%\n",
      "\n",
      "Epoch [20/100]\n",
      "----------\n",
      "Train >> Loss: 0.0282 Acc: 99.09%\n",
      "Val >> Loss: 0.0433 Acc: 98.77%\n",
      "\n",
      "Epoch [21/100]\n",
      "----------\n",
      "Train >> Loss: 0.0318 Acc: 99.01%\n",
      "Val >> Loss: 0.0300 Acc: 99.02%\n",
      "\n",
      "Epoch [22/100]\n",
      "----------\n",
      "Train >> Loss: 0.0312 Acc: 99.05%\n",
      "Val >> Loss: 0.0363 Acc: 98.83%\n",
      "\n",
      "Epoch [23/100]\n",
      "----------\n",
      "Train >> Loss: 0.0287 Acc: 99.12%\n",
      "Val >> Loss: 0.0366 Acc: 98.89%\n",
      "\n",
      "Epoch [24/100]\n",
      "----------\n",
      "Train >> Loss: 0.0271 Acc: 99.21%\n",
      "Val >> Loss: 0.0344 Acc: 99.01%\n",
      "\n",
      "Epoch [25/100]\n",
      "----------\n",
      "Train >> Loss: 0.0254 Acc: 99.25%\n",
      "Val >> Loss: 0.0332 Acc: 98.99%\n",
      "\n",
      "Epoch [26/100]\n",
      "----------\n",
      "Train >> Loss: 0.0265 Acc: 99.15%\n",
      "Val >> Loss: 0.0328 Acc: 98.89%\n",
      "\n",
      "Epoch [27/100]\n",
      "----------\n",
      "Train >> Loss: 0.0261 Acc: 99.21%\n",
      "Val >> Loss: 0.0298 Acc: 99.12%\n",
      "\n",
      "Epoch [28/100]\n",
      "----------\n",
      "Train >> Loss: 0.0282 Acc: 99.11%\n",
      "Val >> Loss: 0.0353 Acc: 99.01%\n",
      "\n",
      "Epoch [29/100]\n",
      "----------\n",
      "Train >> Loss: 0.0253 Acc: 99.22%\n",
      "Val >> Loss: 0.0338 Acc: 98.95%\n",
      "\n",
      "Epoch [30/100]\n",
      "----------\n",
      "Train >> Loss: 0.0261 Acc: 99.17%\n",
      "Val >> Loss: 0.0272 Acc: 99.23%\n",
      "\n",
      "Epoch [31/100]\n",
      "----------\n",
      "Train >> Loss: 0.0266 Acc: 99.23%\n",
      "Val >> Loss: 0.0325 Acc: 99.05%\n",
      "\n",
      "Epoch [32/100]\n",
      "----------\n",
      "Train >> Loss: 0.0250 Acc: 99.20%\n",
      "Val >> Loss: 0.0321 Acc: 99.07%\n",
      "\n",
      "Epoch [33/100]\n",
      "----------\n",
      "Train >> Loss: 0.0237 Acc: 99.33%\n",
      "Val >> Loss: 0.0337 Acc: 98.89%\n",
      "\n",
      "Epoch [34/100]\n",
      "----------\n",
      "Train >> Loss: 0.0260 Acc: 99.19%\n",
      "Val >> Loss: 0.0290 Acc: 99.13%\n",
      "\n",
      "Epoch [35/100]\n",
      "----------\n",
      "Train >> Loss: 0.0248 Acc: 99.19%\n",
      "Val >> Loss: 0.0463 Acc: 98.67%\n",
      "\n",
      "Epoch [36/100]\n",
      "----------\n",
      "Train >> Loss: 0.0231 Acc: 99.24%\n",
      "Val >> Loss: 0.0318 Acc: 99.13%\n",
      "\n",
      "Epoch [37/100]\n",
      "----------\n",
      "Train >> Loss: 0.0223 Acc: 99.32%\n",
      "Val >> Loss: 0.0326 Acc: 98.98%\n",
      "\n",
      "Epoch [38/100]\n",
      "----------\n",
      "Train >> Loss: 0.0211 Acc: 99.34%\n",
      "Val >> Loss: 0.0310 Acc: 99.11%\n",
      "\n",
      "Epoch [39/100]\n",
      "----------\n",
      "Train >> Loss: 0.0250 Acc: 99.21%\n",
      "Val >> Loss: 0.0350 Acc: 98.93%\n",
      "\n",
      "Epoch [40/100]\n",
      "----------\n",
      "Train >> Loss: 0.0238 Acc: 99.29%\n",
      "Val >> Loss: 0.0348 Acc: 98.95%\n",
      "\n",
      "Epoch [41/100]\n",
      "----------\n",
      "Train >> Loss: 0.0238 Acc: 99.24%\n",
      "Val >> Loss: 0.0326 Acc: 99.01%\n",
      "\n",
      "Epoch [42/100]\n",
      "----------\n",
      "Train >> Loss: 0.0227 Acc: 99.30%\n",
      "Val >> Loss: 0.0332 Acc: 99.01%\n",
      "\n",
      "Epoch [43/100]\n",
      "----------\n",
      "Train >> Loss: 0.0202 Acc: 99.39%\n",
      "Val >> Loss: 0.0301 Acc: 99.12%\n",
      "\n",
      "Epoch [44/100]\n",
      "----------\n",
      "Train >> Loss: 0.0226 Acc: 99.30%\n",
      "Val >> Loss: 0.0249 Acc: 99.23%\n",
      "\n",
      "Epoch [45/100]\n",
      "----------\n",
      "Train >> Loss: 0.0218 Acc: 99.36%\n",
      "Val >> Loss: 0.0340 Acc: 98.99%\n",
      "\n",
      "Epoch [46/100]\n",
      "----------\n",
      "Train >> Loss: 0.0239 Acc: 99.21%\n",
      "Val >> Loss: 0.0318 Acc: 99.10%\n",
      "\n",
      "Epoch [47/100]\n",
      "----------\n",
      "Train >> Loss: 0.0196 Acc: 99.40%\n",
      "Val >> Loss: 0.0386 Acc: 98.93%\n",
      "\n",
      "Epoch [48/100]\n",
      "----------\n",
      "Train >> Loss: 0.0235 Acc: 99.27%\n",
      "Val >> Loss: 0.0455 Acc: 98.73%\n",
      "\n",
      "Epoch [49/100]\n",
      "----------\n",
      "Train >> Loss: 0.0216 Acc: 99.31%\n",
      "Val >> Loss: 0.0332 Acc: 99.00%\n",
      "\n",
      "Epoch [50/100]\n",
      "----------\n",
      "Train >> Loss: 0.0195 Acc: 99.38%\n",
      "Val >> Loss: 0.0246 Acc: 99.20%\n",
      "\n",
      "Epoch [51/100]\n",
      "----------\n",
      "Train >> Loss: 0.0219 Acc: 99.32%\n",
      "Val >> Loss: 0.0328 Acc: 99.05%\n",
      "\n",
      "Epoch [52/100]\n",
      "----------\n",
      "Train >> Loss: 0.0230 Acc: 99.27%\n",
      "Val >> Loss: 0.0315 Acc: 99.06%\n",
      "\n",
      "Epoch [53/100]\n",
      "----------\n",
      "Train >> Loss: 0.0187 Acc: 99.39%\n",
      "Val >> Loss: 0.0270 Acc: 99.29%\n",
      "\n",
      "Epoch [54/100]\n",
      "----------\n",
      "Train >> Loss: 0.0230 Acc: 99.24%\n",
      "Val >> Loss: 0.0382 Acc: 98.93%\n",
      "\n",
      "Epoch [55/100]\n",
      "----------\n",
      "Train >> Loss: 0.0203 Acc: 99.38%\n",
      "Val >> Loss: 0.0236 Acc: 99.29%\n",
      "\n",
      "Epoch [56/100]\n",
      "----------\n",
      "Train >> Loss: 0.0229 Acc: 99.29%\n",
      "Val >> Loss: 0.0295 Acc: 99.24%\n",
      "\n",
      "Epoch [57/100]\n",
      "----------\n",
      "Train >> Loss: 0.0204 Acc: 99.33%\n",
      "Val >> Loss: 0.0278 Acc: 99.17%\n",
      "\n",
      "Epoch [58/100]\n",
      "----------\n",
      "Train >> Loss: 0.0234 Acc: 99.28%\n",
      "Val >> Loss: 0.0229 Acc: 99.38%\n",
      "\n",
      "Epoch [59/100]\n",
      "----------\n",
      "Train >> Loss: 0.0200 Acc: 99.35%\n",
      "Val >> Loss: 0.0285 Acc: 99.14%\n",
      "\n",
      "Epoch [60/100]\n",
      "----------\n",
      "Train >> Loss: 0.0213 Acc: 99.34%\n",
      "Val >> Loss: 0.0314 Acc: 99.11%\n",
      "\n",
      "Epoch [61/100]\n",
      "----------\n",
      "Train >> Loss: 0.0191 Acc: 99.35%\n",
      "Val >> Loss: 0.0271 Acc: 99.24%\n",
      "\n",
      "Epoch [62/100]\n",
      "----------\n",
      "Train >> Loss: 0.0192 Acc: 99.39%\n",
      "Val >> Loss: 0.0282 Acc: 99.24%\n",
      "\n",
      "Epoch [63/100]\n",
      "----------\n",
      "Train >> Loss: 0.0214 Acc: 99.34%\n",
      "Val >> Loss: 0.0274 Acc: 99.14%\n",
      "\n",
      "Epoch [64/100]\n",
      "----------\n",
      "Train >> Loss: 0.0204 Acc: 99.33%\n",
      "Val >> Loss: 0.0277 Acc: 99.11%\n",
      "\n",
      "Epoch [65/100]\n",
      "----------\n",
      "Train >> Loss: 0.0194 Acc: 99.39%\n",
      "Val >> Loss: 0.0301 Acc: 99.08%\n",
      "\n",
      "Epoch [66/100]\n",
      "----------\n",
      "Train >> Loss: 0.0175 Acc: 99.45%\n",
      "Val >> Loss: 0.0370 Acc: 99.00%\n",
      "\n",
      "Epoch [67/100]\n",
      "----------\n",
      "Train >> Loss: 0.0206 Acc: 99.36%\n",
      "Val >> Loss: 0.0300 Acc: 99.10%\n",
      "\n",
      "Epoch [68/100]\n",
      "----------\n",
      "Train >> Loss: 0.0202 Acc: 99.37%\n",
      "Val >> Loss: 0.0275 Acc: 99.17%\n",
      "\n",
      "Epoch [69/100]\n",
      "----------\n",
      "Train >> Loss: 0.0189 Acc: 99.42%\n",
      "Val >> Loss: 0.0277 Acc: 99.19%\n",
      "\n",
      "Epoch [70/100]\n",
      "----------\n",
      "Train >> Loss: 0.0209 Acc: 99.35%\n",
      "Val >> Loss: 0.0275 Acc: 99.19%\n",
      "\n",
      "Epoch [71/100]\n",
      "----------\n",
      "Train >> Loss: 0.0203 Acc: 99.37%\n",
      "Val >> Loss: 0.0273 Acc: 99.26%\n",
      "\n",
      "Epoch [72/100]\n",
      "----------\n",
      "Train >> Loss: 0.0195 Acc: 99.40%\n",
      "Val >> Loss: 0.0297 Acc: 99.11%\n",
      "\n",
      "Epoch [73/100]\n",
      "----------\n",
      "Train >> Loss: 0.0180 Acc: 99.44%\n",
      "Val >> Loss: 0.0313 Acc: 99.15%\n",
      "\n",
      "Epoch [74/100]\n",
      "----------\n",
      "Train >> Loss: 0.0199 Acc: 99.38%\n",
      "Val >> Loss: 0.0333 Acc: 98.99%\n",
      "\n",
      "Epoch [75/100]\n",
      "----------\n",
      "Train >> Loss: 0.0191 Acc: 99.41%\n",
      "Val >> Loss: 0.0332 Acc: 99.00%\n",
      "\n",
      "Epoch [76/100]\n",
      "----------\n",
      "Train >> Loss: 0.0168 Acc: 99.51%\n",
      "Val >> Loss: 0.0289 Acc: 99.19%\n",
      "\n",
      "Epoch [77/100]\n",
      "----------\n",
      "Train >> Loss: 0.0217 Acc: 99.30%\n",
      "Val >> Loss: 0.0278 Acc: 99.17%\n",
      "\n",
      "Epoch [78/100]\n",
      "----------\n",
      "Train >> Loss: 0.0189 Acc: 99.39%\n",
      "Val >> Loss: 0.0283 Acc: 99.20%\n",
      "\n",
      "Epoch [79/100]\n",
      "----------\n",
      "Train >> Loss: 0.0198 Acc: 99.38%\n",
      "Val >> Loss: 0.0292 Acc: 99.07%\n",
      "\n",
      "Epoch [80/100]\n",
      "----------\n",
      "Train >> Loss: 0.0181 Acc: 99.45%\n",
      "Val >> Loss: 0.0344 Acc: 98.76%\n",
      "\n",
      "Epoch [81/100]\n",
      "----------\n",
      "Train >> Loss: 0.0174 Acc: 99.49%\n",
      "Val >> Loss: 0.0296 Acc: 99.08%\n",
      "\n",
      "Epoch [82/100]\n",
      "----------\n",
      "Train >> Loss: 0.0185 Acc: 99.44%\n",
      "Val >> Loss: 0.0266 Acc: 99.17%\n",
      "\n",
      "Epoch [83/100]\n",
      "----------\n",
      "Train >> Loss: 0.0175 Acc: 99.44%\n",
      "Val >> Loss: 0.0286 Acc: 99.20%\n",
      "\n",
      "Epoch [84/100]\n",
      "----------\n",
      "Train >> Loss: 0.0192 Acc: 99.39%\n",
      "Val >> Loss: 0.0340 Acc: 98.90%\n",
      "\n",
      "Epoch [85/100]\n",
      "----------\n",
      "Train >> Loss: 0.0198 Acc: 99.38%\n",
      "Val >> Loss: 0.0359 Acc: 98.98%\n",
      "\n",
      "Epoch [86/100]\n",
      "----------\n",
      "Train >> Loss: 0.0181 Acc: 99.40%\n",
      "Val >> Loss: 0.0259 Acc: 99.20%\n",
      "\n",
      "Epoch [87/100]\n",
      "----------\n",
      "Train >> Loss: 0.0182 Acc: 99.45%\n",
      "Val >> Loss: 0.0330 Acc: 99.12%\n",
      "\n",
      "Epoch [88/100]\n",
      "----------\n",
      "Train >> Loss: 0.0186 Acc: 99.40%\n",
      "Val >> Loss: 0.0269 Acc: 99.25%\n",
      "\n",
      "Epoch [89/100]\n",
      "----------\n",
      "Train >> Loss: 0.0180 Acc: 99.42%\n",
      "Val >> Loss: 0.0287 Acc: 99.14%\n",
      "\n",
      "Epoch [90/100]\n",
      "----------\n",
      "Train >> Loss: 0.0181 Acc: 99.46%\n",
      "Val >> Loss: 0.0288 Acc: 99.14%\n",
      "\n",
      "Epoch [91/100]\n",
      "----------\n",
      "Train >> Loss: 0.0198 Acc: 99.38%\n",
      "Val >> Loss: 0.0262 Acc: 99.25%\n",
      "\n",
      "Epoch [92/100]\n",
      "----------\n",
      "Train >> Loss: 0.0196 Acc: 99.38%\n",
      "Val >> Loss: 0.0261 Acc: 99.23%\n",
      "\n",
      "Epoch [93/100]\n",
      "----------\n",
      "Train >> Loss: 0.0171 Acc: 99.45%\n",
      "Val >> Loss: 0.0325 Acc: 99.08%\n",
      "\n",
      "Epoch [94/100]\n",
      "----------\n",
      "Train >> Loss: 0.0161 Acc: 99.51%\n",
      "Val >> Loss: 0.0239 Acc: 99.36%\n",
      "\n",
      "Epoch [95/100]\n",
      "----------\n",
      "Train >> Loss: 0.0187 Acc: 99.39%\n",
      "Val >> Loss: 0.0265 Acc: 99.17%\n",
      "\n",
      "Epoch [96/100]\n",
      "----------\n",
      "Train >> Loss: 0.0198 Acc: 99.36%\n",
      "Val >> Loss: 0.0276 Acc: 99.17%\n",
      "\n",
      "Epoch [97/100]\n",
      "----------\n",
      "Train >> Loss: 0.0190 Acc: 99.43%\n",
      "Val >> Loss: 0.0263 Acc: 99.20%\n",
      "\n",
      "Epoch [98/100]\n",
      "----------\n",
      "Train >> Loss: 0.0191 Acc: 99.40%\n",
      "Val >> Loss: 0.0316 Acc: 98.98%\n",
      "\n",
      "Epoch [99/100]\n",
      "----------\n",
      "Train >> Loss: 0.0193 Acc: 99.41%\n",
      "Val >> Loss: 0.0235 Acc: 99.25%\n",
      "\n",
      "Epoch [100/100]\n",
      "----------\n",
      "Train >> Loss: 0.0166 Acc: 99.48%\n",
      "Val >> Loss: 0.0323 Acc: 99.08%\n",
      "\n",
      "Best model save at ./MNIST/best_10.pth (Acc: 99.38%)\n"
     ]
    }
   ],
   "execution_count": 21
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": "### 进行验证集测试",
   "id": "1ba8e5a3c761b6a4"
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-05-09T12:52:09.539792Z",
     "start_time": "2025-05-09T12:52:03.231178Z"
    }
   },
   "cell_type": "code",
   "source": [
    "val_model = ResNet10(num_classes=10)\n",
    "val_model.load_state_dict(torch.load('./../data/best_10.pth'))\n",
    "test_phase(val_model, Val_Loader)"
   ],
   "id": "fc825e0f1b6e8db4",
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Test Accuracy: 99.17%\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "<Figure size 1200x400 with 30 Axes>"
      ],
      "image/png": "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THvtsJzmf/HixUy8OiGEECL4sJUOAKpUqWJ6//79prlqXrFixUzHxMREPHdCQoJptua/8sorpu+//37T27dvN63KeiK3w+2sadOmpvk5FXCfYcuXL29627ZtpnNye1JmlBBCCCGEEEIIIYTwDb2MEkIIIYQQQgghhBC+oZdRQgghhBBCCCGEEMI3csWaUeyX5nVMAOD55583vWrVKtOHDx8Oq7VeUMZTsmRJ061btw6ry5YtazoUCqX6O4oUKWL65ptvNt2rVy/Ts2fPNv3ll186xy9fvtz0gQMHTJ85cybV1yJEUOE1+WrWrGl6+PDhpkuXLm16xYoVzvE///yzabUtIYQQIn14n1t4HVxef6ZMmTKmef2olDh58qTpjRs3mo605mOePHmiOm9uoUaNGqYHDx5smmN29uxZ05s3bza9fv1651wnTpwwXadOHdPx8fGmjxw5YvrChQtpvGqRWvi+L1y4sOm2bduavuOOO0x36dLFOZ5ju3jxYtMVKlQwvXfv3gy51qxAmVFCCCGEEEIIIYQQwjf0MkoIIYQQQgghhBBC+EausOnFxsaa7ty5s/NZvnz5TLOFr3LlyqaLFi1q+vTp05lxibkaTkfltFHWXLKSy8emF05L7tmzp2m2DgJA48aNTbOdLy4uzjSnwubkEpvhYKsrp5jy7+S1wNatW9d0uXLlTHObSy+XLl0yzXbarVu3mt65c6dpTikH0mb5FJHhvrZRo0amuZ1x21i2bJlzPKcZB60NiayB0+PV3oXInvC8gi3ePMYDwP79+02fO3cu068riLAFnp9vYmJiTEeapyUkJDj/XrNmjen/+7//M83j9759+8JuDwL8PML3bdOmTU1758a8nAE/W9x3332m+Xdma928efNMz5w50znvtm3bTLPlb9euXaZ5zsW2SraBAcGLU1ZTvHhx082bNzc9YsQI03369DHN9lnAtWqeP3/edPv27U1/8cUXGXOxWYAyo4QQQgghhBBCCCGEb+hllBBCCCGEEEIIIYTwjcDa9Dh1slatWqb/+Mc/OvtxanC9evVMd+rUyfTq1atNc1qjyBg4/XDHjh2mt2zZYrpUqVKmvRa6aOA4R4Ir9vXt29f5jP/dsmVL0//+979Nc7oyVysJgjWErZSRKqa1adPGOaZZs2amO3bsaJrtexyXtFRZ4XTV7du3m16wYIHpqVOn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P75/KleubPr66683feutt5rm9Y0WL16cru8OCryGEq8fxT5x9rh7/evctnk9GF4zJhLsX9+1a5fzGV8Lr03A6wzt2bPHNMfTWxab18URqadkyZKmu3TpYrpVq1Zh9+c+kscEwF2XICgloLMLZcqUMd2jRw/T3nGWY8J98JEjR0xzv8DrgfC94F2vgr+Hx/LWrVub5nuG75P//Oc/zrl4bNXaYpkP99fedTL79OkTdj8mLi7ONPfd2WUdHPEL3rkZx6dIkSKmea3Nv/71r6Z5Lar33nsvE64w98L9Ka8fFB8fn+nfzesZe+H14Hg9Vr5ffvWrX5n+9NNPTR84cCCjLtF3+NqfeeYZ07wmNM9/ed1rwH1H0K1bN9M8h4rUP/JYym0OSL6m15XgcZbXngPcufWMGTNM+71OFKPMKCGEEEIIIYQQQgjhG3oZJYQQQgghhBBCCCF8I8tteqdOnTLNpWFvuOEGZ7+bb77ZNKebf/fdd6bZ1sVljDnt7syZM1FdF9vNONWO0/O81hW2nHD5+pUrV5qeN2+e6ZxmzWM4hZTj9vLLL5vmlF8uWcm/LeBarThVnNMd+/XrZ5rTx9MCp/9zKiPbf7755hvnmPXr15vme4vteJwKGeRS8pyyzym7W7dudfb76aefTHO7498/mtRTtrwCQLFixUz/5je/MT106FDTfI+xrdBb7lyWIfde5T6M7TvcxgFg9erVptneWrRo0St+H8ef25X337wfpxWz5YCteCdPnnTOJatI+mD7APfFpUqVMs0lgvl+mT59unOuIPeHWQ2XiWabG89bAOCOO+4wvWLFirCarRlss+vcubNptux54b65SpUqpnls4L7DOweSNc9feJwcPny481nTpk1Nc//L9hGeA/N9cejQIedc6ov9gcfGZ599Nux2wLXgiczHa7mKiYkxXbt2bdPc//HSFumF7V88R2vbtq3pXr16Ocd06NDBNM+T2XLPSyP4YSv0A34n8f3335vmOQw/x997773O8Twf9j67ZBT8ToNjwFZpfp7dvHlzxOP5PvM+H/mJMqOEEEIIIYQQQgghhG/oZZQQQgghhBBCCCGE8I0st+kdPHjQ9OzZs0337t3b2a9r166mH3nkEdP16tUz3b17d9OcosYpafv373fOyxWj2FbG1duaN29uukaNGqbfeOONiOfiVenZJnTp0iUEAU67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"
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "execution_count": 22
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": "### 输出结果",
   "id": "ece4185c0fecacbf"
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-05-09T12:52:09.544650Z",
     "start_time": "2025-05-09T12:52:09.540796Z"
    }
   },
   "cell_type": "code",
   "source": [
    "# 归一化\n",
    "test_transform = transforms.Compose([\n",
    "    transforms.ToPILImage(), \n",
    "    transforms.Resize(32), \n",
    "    transforms.ToTensor(), \n",
    "    transforms.Normalize((0.1307,), (0.3081,))\n",
    "])"
   ],
   "id": "c8f296dd8b6c8db3",
   "outputs": [],
   "execution_count": 23
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-05-09T12:52:17.623116Z",
     "start_time": "2025-05-09T12:52:09.545628Z"
    }
   },
   "cell_type": "code",
   "source": [
    "Test_Loader = load_data('./../data/test.csv', test_transform, 64, has_label=False)\n",
    "test_model = ResNet10(num_classes=10)\n",
    "test_model.load_state_dict(torch.load('./../data/best_10.pth'))\n",
    "result(test_model, Test_Loader, './../data/result10.csv')"
   ],
   "id": "4410663c0085e73f",
   "outputs": [],
   "execution_count": 24
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": "![](./../img/12.png)",
   "id": "8f5612ffc2ca5d8f"
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-05-09T13:58:36.654793Z",
     "start_time": "2025-05-09T13:58:36.649924Z"
    }
   },
   "cell_type": "code",
   "source": "190 / 1587",
   "id": "91d2ed305db41e33",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.11972274732199117"
      ]
     },
     "execution_count": 25,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 25
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 2
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython2",
   "version": "2.7.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
